// 范围日期选择器 联动效果工具类
// 使用示例：（使用前要引入函数）
// <el-date-picker v-model="form.startTime" type="date" placeholder="起始日期" value-format="timestamp" :picker-options="startDatePicker(form.endTime, null, true)" :editable="false" />
// <el-date-picker v-model="form.endTime" type="date" placeholder="结束日期" value-format="timestamp" :picker-options="endDatePicker(form.startTime, null, true)" :editable="false" />

/*
  * 开始日期选择器
  *
  * @param endDate1 (number) 第一个结束日期的时间戳
  * @param endDate2 (number) 第二个结束日期的时间戳
  * @param canBeEndDate (boolean) 是否可以和结束日期为同一天，默认false
  *
  * @author yudongbo 2020-04-20
  */
export function startDatePicker(endDate1, endDate2, canBeEndDate) {
  return {
    disabledDate(time) {
      if (canBeEndDate) {
        // 大于结束日期的禁用
        if (endDate1 && endDate2) {
          return time.getTime() > new Date(endDate1).getTime() || time.getTime() > new Date(endDate2).getTime()
        } else if (endDate1) {
          return time.getTime() > new Date(endDate1).getTime()
        } else if (endDate2) {
          return time.getTime() > new Date(endDate2).getTime()
        } else {
          return false
        }
      } else {
        // 大于等于结束日期的禁用
        if (endDate1 && endDate2) {
          return time.getTime() >= new Date(endDate1).getTime() || time.getTime() >= new Date(endDate2).getTime()
        } else if (endDate1) {
          return time.getTime() >= new Date(endDate1).getTime()
        } else if (endDate2) {
          return time.getTime() >= new Date(endDate2).getTime()
        } else {
          return false
        }
      }
    }
  }
}

/*
  * 结束日期选择器
  *
  * @param startDate1 (number) 第一个开始日期的时间戳
  * @param startDate2 (number) 第二个开始日期的时间戳
  * @param canBeStartDate (boolean) 是否可以和开始日期为同一天，默认false
  *
  * @author yudongbo 2020-04-20
  */
export function endDatePicker(startDate1, startDate2, canBeStartDate) {
  return {
    disabledDate(time) {
      if (canBeStartDate) {
        // 小于开始日期的禁用
        if (startDate1 && startDate2) {
          return time.getTime() < new Date(startDate1).getTime() || time.getTime() < new Date(startDate2).getTime()
        } else if (startDate1) {
          return time.getTime() < new Date(startDate1).getTime()
        } else if (startDate2) {
          return time.getTime() < new Date(startDate2).getTime()
        } else {
          return false
        }
      } else {
        // 小于等于开始日期的禁用
        if (startDate1 && startDate2) {
          return time.getTime() <= new Date(startDate1).getTime() || time.getTime() <= new Date(startDate2).getTime()
        } else if (startDate1) {
          return time.getTime() <= new Date(startDate1).getTime()
        } else if (startDate2) {
          return time.getTime() <= new Date(startDate2).getTime()
        } else {
          return false
        }
      }
    }
  }
}

/*
  * 中间日期选择器
  *
  * @param startDate (number) 开始日期的时间戳
  * @param endDate (number) 结束日期的时间戳
  * @param canBeStartDate (boolean) 是否可以和开始日期为同一天，默认false
  * @param canBeEndDate (boolean) 是否可以和结束日期为同一天，默认false
  *
  * @author yudongbo 2020-04-20
  */
export function middleDatePicker(startDate, endDate, canBeStartDate, canBeEndDate) {
  return {
    disabledDate(time) {
      if (startDate && endDate) {
        if (canBeStartDate && canBeEndDate) {
          // 可与开始日期或结束日期为同一天时
          return time.getTime() < new Date(startDate).getTime() || time.getTime() > new Date(endDate).getTime()
        } else if (canBeStartDate) {
          // 可与开始日期为同一天时
          return time.getTime() < new Date(startDate).getTime() || time.getTime() >= new Date(endDate).getTime()
        } else if (canBeEndDate) {
          // 可与结束日期为同一天时
          return time.getTime() <= new Date(startDate).getTime() || time.getTime() > new Date(endDate).getTime()
        } else {
          // 不能与开始日期或结束日期为同一天时
          return time.getTime() <= new Date(startDate).getTime() || time.getTime() >= new Date(endDate).getTime()
        }
      } else if (startDate) {
        // 可与开始日期为同一天时 小于开始日期的禁用，否则 小于等于结束日期的禁用
        if (canBeStartDate) {
          return time.getTime() < new Date(startDate).getTime()
        } else {
          return time.getTime() <= new Date(startDate).getTime()
        }
      } else if (endDate) {
        // 可与结束日期为同一天时 大于结束日期的禁用，否则 大于等于结束日期的禁用
        if (canBeEndDate) {
          return time.getTime() > new Date(endDate).getTime()
        } else {
          return time.getTime() >= new Date(endDate).getTime()
        }
      } else {
        return false
      }
    }
  }
}

/*
  * 开始日期选择器
  *
  * @param endDate (string) 结束日期（yyyy-MM-dd）
  *
  * @author yudongbo 2020-04-20
  */
export function startDatePickerForDateStr(endDate) {
  return {
    disabledDate(time) {
      // 大于等于结束日期的禁用
      if (endDate) {
        const endDateStr = endDate + ' 00:00:00'
        return time.getTime() >= new Date(endDateStr).getTime()
      } else {
        return false
      }
    }
  }
}

/*
  * 结束日期选择器
  *
  * @param startDate (string) 开始日期（yyyy-MM-dd）
  *
  * @author yudongbo 2020-04-20
  */
export function endDatePickerForDateStr(startDate) {
  return {
    disabledDate(time) {
      // 小于等于开始日期的禁用
      if (startDate) {
        const startDateStr = startDate + ' 00:00:00'
        return time.getTime() <= new Date(startDateStr).getTime()
      } else {
        return false
      }
    }
  }
}
